{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "Chapter_06.ipynb",
      "provenance": [],
      "collapsed_sections": [
        "Dgqjd0nA7qcJ",
        "KTsRQDu0LTIL",
        "XnnenytzPfc4",
        "PpsqrcJRVW7v",
        "qKFW2xWkdTYu",
        "AWoT_NGHKAKY"
      ],
      "include_colab_link": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "accelerator": "GPU"
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/jo-cho/advances_in_financial_machine_learning/blob/master/Chapter_06.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "08JXsQe161rv",
        "colab_type": "text"
      },
      "source": [
        "<< Exercises >>"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "TC0GH_Gm7CcV",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "import numpy as np\n",
        "import pandas as pd\n",
        "import matplotlib.pyplot as plt\n",
        "import seaborn as sns; sns.set()"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Dgqjd0nA7qcJ",
        "colab_type": "text"
      },
      "source": [
        "## 1. \n",
        "Why is bagging based on random sampling with replacement? Would bagging still reduce a forecast’s variance if sampling were without replacement?"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "hwCusfKhIY7X",
        "colab_type": "text"
      },
      "source": [
        "--------\n",
        "### What is bagging?\n",
        "\n",
        "Given a standard training set $D$ of size n, bagging generates m new training sets $D_{i}$, each of size n′, by sampling from $D$ uniformly and with replacement.\n",
        "\n",
        "By sampling with replacement, some observations may be repeated in each $D_{i}$. If $n′=n$, then for large n the set $D_{i}$ is expected to have the fraction $(1 - 1/e) (≈63.2%)$ of the unique examples of $D$, the rest being duplicates.\n",
        "\n",
        "This kind of sample is known as a bootstrap sample. Then, m models are fitted using the above m bootstrap samples and combined by averaging the output (for regression) or voting (for classification)\n",
        "\n",
        "---------\n",
        "### Why replacement?\n",
        "\n",
        "Think of bias and variance as the two components of error of a classifier. Informally, the variance of a classifier is “given a different sample of training data, how much will my classifier’s performance be affected”, and bias is “for a given training set, how well does the classifier generalize over unseen examples.”\n",
        "\n",
        "The same theoretical property is not true if you sample without replacement, because sampling without replacement would lead to pretty high variance. (overfit)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "KTsRQDu0LTIL",
        "colab_type": "text"
      },
      "source": [
        "## 2.\n",
        "Suppose that your training set is based on highly overlap labels (i.e., with low\n",
        "uniqueness, as defined in Chapter 4).\n",
        "\n",
        "(a) Does this make bagging prone to overfitting, or just ineffective? Why?\n",
        "\n",
        "(b) Is out-of-bag accuracy generally reliable in financial applications? Why?\n",
        "\n",
        "-----------\n",
        "### Higly overlap labels vs. Bagging\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "KYPkkt_Yffld",
        "colab_type": "text"
      },
      "source": [
        "(In Chapter 4),\n",
        "\n",
        "When sampling with replacement (bootstrap), it becomes increasingly likely that in-bag observations will be (1) redundant to each other, and (2) very similar to out-of-bag observations.\n",
        "\n",
        "Redundancy of draws makes the bootstrap inefficient. For example, in the case of a random forest, all trees in the forest will essentially be very similar copies of a single overfit decision tree. And because the random sampling makes out-of-bag examples very similar to the in-bag ones, out-of-bag accuracy will be grossly inflated."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "XnnenytzPfc4",
        "colab_type": "text"
      },
      "source": [
        "## 3.\n",
        "\n",
        "Build an ensemble of estimators, where the base estimator is a decision tree.\n",
        "\n",
        "(a) How is this ensemble different from an RF?\n",
        "\n",
        "(b) Using sklearn, produce a bagging classifier that behaves like an RF. What\n",
        "parameters did you have to set up, and how?\n",
        "\n",
        "----------------\n",
        "## Ensemble of estimators (base = a decision tree) vs. Random Forest"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "WsjCVdGqQda3",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "from sklearn.datasets import make_classification #examples\n",
        "from sklearn.tree import DecisionTreeClassifier\n",
        "from sklearn.ensemble import BaggingClassifier\n",
        "from sklearn.ensemble import RandomForestClassifier"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "vtLn3T4SQpTa",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "X, y  = make_classification(random_state=1)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "lnW_EVgOQq-V",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# 전자\n",
        "\n",
        "clf1 = BaggingClassifier(base_estimator=DecisionTreeClassifier(), oob_score=True)\n",
        "\n",
        "# 후자 (RF)\n",
        "\n",
        "clf2 = RandomForestClassifier(oob_score=True, random_state=1)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "AWfC32wMREFJ",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 88
        },
        "outputId": "a566b9f3-1f96-48e4-c361-449900c919ed"
      },
      "source": [
        "clf1.fit(X,y)\n",
        "clf2.fit(X,y)\n",
        "\n",
        "print( clf1.oob_score_, 'vs', clf2.oob_score_)"
      ],
      "execution_count": 25,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "0.96 vs 0.91\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "stream",
          "text": [
            "/usr/local/lib/python3.6/dist-packages/sklearn/ensemble/forest.py:245: FutureWarning: The default value of n_estimators will change from 10 in version 0.20 to 100 in 0.22.\n",
            "  \"10 in version 0.20 to 100 in 0.22.\", FutureWarning)\n"
          ],
          "name": "stderr"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "z3p0pAIFSSdj",
        "colab_type": "text"
      },
      "source": [
        "------------------\n",
        "RF shares some similarities with bagging, in the sense of training independently\n",
        "individual estimators over bootstrapped subsets of the data. \n",
        "\n",
        "**The key difference with bagging is that random forests incorporate a second level of randomness**: When optimizing each node split, only a random subsample (without replacement) of the attributes will be evaluated, with the purpose of further decorrelating the estimators.\n",
        "\n",
        "---------\n",
        "-Advantages of RF\n",
        "\n",
        "Like bagging, RF reduces forecasts’ variance without overfitting (remember, as\n",
        "long as 𝜌̄ < 1). A second advantage is that RF evaluates feature importance, which\n",
        "we will discuss in depth in Chapter 8.A third advantage is that RF provides out-of-bag\n",
        "accuracy estimates, however in financial applications they are likely to be inflated (as\n",
        "discussed in Section 6.3.3). But like bagging, RF will not necessarily exhibit lower\n",
        "bias than individual decision trees.\n",
        "\n",
        "------------\n",
        "Unlike bagging, RF always fixes the size of the bootstrapped\n",
        "samples to match the size of the training dataset."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "pTphexIXSQGw",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# Make it smae as RF\n",
        "## the key difference is split it radomly!\n",
        "\n",
        "clf3 = BaggingClassifier(base_estimator=DecisionTreeClassifier(splitter='random'), oob_score=True, random_state=1)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "b-2BwpTlU1sP",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        },
        "outputId": "9882a03a-7e4a-4070-ebdf-5f71510bccfc"
      },
      "source": [
        "clf3.fit(X,y)\n",
        "\n",
        "print( clf2.oob_score_, 'vs', clf3.oob_score_)"
      ],
      "execution_count": 26,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "0.91 vs 0.95\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "PpsqrcJRVW7v",
        "colab_type": "text"
      },
      "source": [
        "## 4.\n",
        "Consider the relation between an RF, the number of trees it is composed of, and\n",
        "the number of features utilized:\n",
        "\n",
        "(a) Could you envision a relation between the minimum number of trees needed\n",
        "in an RF and the number of features utilized?\n",
        "\n",
        "(b) Could the number of trees be too small for the number of features used?\n",
        "\n",
        "(c) Could the number of trees be too high for the number of observations available?\n",
        "\n",
        "--------------------\n",
        "## RF. number of features(dimensionality) vs. number of trees vs. number of observations available\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Z0zxPL7zV-Bg",
        "colab_type": "text"
      },
      "source": [
        "In general, the more trees you use the better get the results. However, the improvement decreases as the number of trees increases, i.e. at a certain point the benefit in prediction performance from learning more trees will be lower than the cost in computation time for learning these additional trees.\n",
        "\n",
        " If the number of observations is large, but the number of trees is too small, then some observations will be predicted only once or even not at all. If the number of predictors is large but the number of trees is too small, then some features can (theoretically) be missed in all subspaces used. Both cases results in the decrease of random forest predictive power. But the last is a rather extreme case, since the selection of subspace is performed at each node"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "7C4mz1Nealx3",
        "colab_type": "text"
      },
      "source": [
        "\"... Hence, the convergence rate of the error rate\n",
        "curve is not directly dependent on the number of observations n or the number of features,\n",
        "but these characteristics could influence the empirical distribution of the εi\n",
        "’s and hence\n",
        "possibly the convergence rate as outlined in Section 4.3.1.\""
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "aSI7S3HyKAvs",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 384
        },
        "outputId": "2ac3bda1-49b2-4435-af67-07423d074ab6"
      },
      "source": [
        "from PIL import Image\n",
        "Image.open('/content/ZGAzA.png')"
      ],
      "execution_count": 30,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<PIL.PngImagePlugin.PngImageFile image mode=RGBA size=526x367 at 0x7FC2737009B0>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 30
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "BNf_FWqVcYAr",
        "colab_type": "text"
      },
      "source": [
        "max_samples : avg uniqness\n",
        "\n",
        "max_features : PCA..or whaterver "
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "qKFW2xWkdTYu",
        "colab_type": "text"
      },
      "source": [
        "## 5. \n",
        "How is out-of-bag accuracy different from stratified k-fold (with shuffling) crossvalidation accuracy? \n",
        "\n",
        "-------------"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "YKYYRkGdfu29",
        "colab_type": "text"
      },
      "source": [
        " The out-of-bag error is an error estimation technique often used to evaluate the accuracy of a random forest and to select appropriate values for tuning parameters"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Bdkj2JkhfvmJ",
        "colab_type": "text"
      },
      "source": [
        "However, for binary classification problems with metric predictors it has been shown that the out-of-bag error can overestimate the true prediction error depending on the choices of random forests parameters."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "njfxSDGsddem",
        "colab_type": "text"
      },
      "source": [
        "https://towardsdatascience.com/what-is-out-of-bag-oob-score-in-random-forest-a7fa23d710"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "LzpGJjfKfJ54",
        "colab_type": "text"
      },
      "source": [
        "As compared to the validation score OOB score is computed on data that was not necessarily used in the analysis of the model. Whereas for calculation validation score, a part of the original training dataset is actually set aside before training the models. Additionally, the OOB score is calculated using only a subset of DTs not containing the OOB sample in their bootstrap training dataset. While the validation score is calculated using all the DTs of the ensemble."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "AWoT_NGHKAKY",
        "colab_type": "text"
      },
      "source": [
        "#참고"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "UrhfcWv7gDFt",
        "colab_type": "text"
      },
      "source": [
        "\n",
        "### 1.\n",
        "\n",
        "https://en.wikipedia.org/wiki/Bootstrap_aggregating\n",
        "\n",
        "https://www.quora.com/Why-does-random-forest-use-sampling-with-replacement-instead-of-without-replacement\n",
        "\n",
        "### 2,3.  \n",
        "The book\n",
        "\n",
        "### 4.\n",
        "\n",
        "Probst, Philipp, and Anne-Laure Boulesteix. \"To Tune or Not to Tune the Number of Trees in Random Forest.\" Journal of Machine Learning Research 18 (2017): 181-1.\n",
        "\n",
        "https://stats.stackexchange.com/questions/36165/does-the-optimal-number-of-trees-in-a-random-forest-depend-on-the-number-of-pred/36183\n",
        "\n",
        "https://www.researchgate.net/post/How_to_determine_the_number_of_trees_to_be_generated_in_Random_Forest_algorithm\n",
        "\n",
        "### 5.\n",
        "\n",
        "https://towardsdatascience.com/what-is-out-of-bag-oob-score-in-random-forest-a7fa23d710\n",
        "\n",
        "https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0201904"
      ]
    }
  ]
}